<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>113-利用构造函数创建对象</title>
    <script>
        // 利用构造函数创建对象
        // 我们需要创建四大天王的对象，相同的属性：名字、年龄、性别； 相同的方法：唱歌
        // 构造函数的语法格式
        // function 构造函数名() {
        //     this.属性 = 值;
        //     this.方法 = function () { }
        // }
        // new 构造函数名();
        function Star(uname, age, sex) {
            this.name = uname;
            this.age = age;
            this.sex = sex;
            this.sing = function (sang) {
                console.log(sang);
            }
        }
        var ldh = new Star('刘德华', 18, '男'); // 调用函数返回的是一个对象
        // console.log(typeof ldh); // object
        console.log(ldh.name);
        console.log(ldh['sex']);
        ldh.sing('冰雨');
        var zxy = new Star('张学友', 19, '男');
        console.log(zxy.name);
        console.log(zxy.age);
        zxy.sing('李香兰');

        // 1. 构造函数名字首字母要大写
        // 2. 我们构造函数不需要return，就可以返回结果
        // 3. 我们调用构造函数，必须使用 new
        // 4. 我们只要new Star() 调用函数就创建一个对象 ldh
        // 5. 我们的属性和方法前面必须添加 this

        // 练习：请按照要求创建对象
        // 利用构造函数创建两个英雄对象。函数中的公共部分包括：姓名属性（name），类型属性（type），血量属性（blood）和攻击方式（attack）。
        // 英雄对象的信息如下：
        // 廉颇 力量型 500血量 攻击：近战
        // 后羿 射手型 100血量 攻击：远程

        // 自写：
        function Hero(hName, hType, hBlood) {
            this.name = hName;
            this.type = hType;
            this.blood = hBlood;
            this.attack = function (hAttack) {
                console.log(hAttack);
            }
        }
        var lp = new Hero('廉颇', '力量型', 500);
        console.log(lp.name, lp.type, lp.blood);
        lp.attack('近战');
        var hy = new Hero('后羿', '射手型', 100);
        console.log(hy.name, hy.type, hy.blood);
        hy.attack('远程');
    </script>
</head>

<body>

</body>

</html>